package com.itheima.d3_udp2;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * 目标：完成UDP通信快速入门-服务端反复的收
 */
public class Server {
    public static void main(String[] args) throws Exception {
        System.out.println("----服务端启动----");
        // 1、创建一个服务端对象（创建一个接韭菜的人） 注册端口
        DatagramSocket socket = new DatagramSocket(6666);

        // 2、创建一个数据包对象，用于接收数据的（创建一个韭菜盘子）
        byte[] buffer = new byte[1024 * 64]; // 64KB.
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

        while (true) {
            // 3、开始正式使用数据包来接收客户端发来的数据
            socket.receive(packet);

            // 4、从字节数组中，把接收到的数据直接打印出来
            // 接收多少就倒出多少
            // 获取本次数据包接收了多少数据。
            int len = packet.getLength();

            // 1、Java代码完成对字符的编码，String提供了如下方法
            // byte[] getBytes()   使用平台的默认字符集将该 String编码为一系列字节，将结果存储到新的字节数组中
            // byte[] getBytes(String charsetName)       使用指定的字符集将该 String编码为一系列字节，将结果存储到新的字节数组中

            // 2、Java代码完成对字符的解码，String提供了如下方法
            //  String(byte[] bytes)       通过使用平台的默认字符集解码指定的字节数组来构造新的 String
            //  String(byte[] bytes, String charsetName)    通过指定的字符集解码指定的字节数组来构造新的 String
            String rs = new String(buffer, 0 , len);
            System.out.println(rs);

            System.out.println("客户端的ip地址信息： "+packet.getAddress().getHostAddress());
            System.out.println("客户端的端口号： "+packet.getPort());
            System.out.println("--------------------------------------");
        }

        //服务端一般不会死亡，所以不要关闭socket，也就是不要socket.close();
    }
}
